package pe.com.bbva.ge.domain.solicitud;

import java.math.BigDecimal;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;

import pe.com.bbva.ge.domain.base.Auditoria;
import pe.com.bbva.ge.domain.configuracion.Posicion;
import pe.com.bbva.ge.domain.configuracion.Valor;


/**
 * The persistent class for the SOL_DESTINO database table.
 * 
 */
@Entity
@Table(name="SOL_DESTINO")
public class Destino extends Auditoria {
	private static final long serialVersionUID = 1L;
	
	@Id
	@Column(unique = true, nullable = false, precision = 19)
	@GeneratedValue(strategy = GenerationType.TABLE, generator = "SEQ_DESTINO")
	@TableGenerator(name = "SEQ_DESTINO", 
	table = Destino.SEQ_TABLA, 
	pkColumnName = Destino.SEQ_TABLA_PK, 
	initialValue = 1, 
	valueColumnName = Destino.SEQ_TABLA_COLUMN, 
	pkColumnValue = "pe.com.bbva.ge.domain.solicitud.Destino", 
	allocationSize = 1)	
	private long id;
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + (int) (id ^ (id >>> 32));
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Destino other = (Destino) obj;
		if (id != other.id)
			return false;
		return true;
	}
	
	//

	private BigDecimal costo;

	private BigDecimal costomillaje;

	private BigDecimal millaje;

	//uni-directional many-to-one association to Posicion
	@ManyToOne
	@JoinColumn(name="DESTINO")
	private Posicion destino;

	//uni-directional many-to-one association to Valor
	@ManyToOne
	@JoinColumn(name="TIPO")
	private Valor tipo;

	//bi-directional many-to-one association to SolSolicitud
	@ManyToOne
	@JoinColumn(name="SOLICITUD")
	private Solicitud solicitud;

	//bi-directional many-to-one association to DetalleMaterial
	@OneToMany(mappedBy="destino", cascade=CascadeType.ALL)
	private List<DetalleMaterial> detalleMateriales;

	//bi-directional many-to-one association to DetalleMoneda
	@OneToMany(mappedBy="destino", cascade=CascadeType.ALL)
	private List<DetalleMoneda> detalleMonedas;

	//bi-directional many-to-one association to DetalleOtroServicio
	@OneToMany(mappedBy="destino", cascade=CascadeType.ALL)
	private List<DetalleOtroServicio> detalleOtroServicios;

	//bi-directional many-to-one association to DetalleCasetera
	@OneToMany(mappedBy="destino", cascade=CascadeType.ALL)
	private List<DetalleCasetera> detalleCaseteras;

		
	public BigDecimal getCosto() {
		return this.costo;
	}

	public void setCosto(BigDecimal costo) {
		this.costo = costo;
	}

	public BigDecimal getCostomillaje() {
		return this.costomillaje;
	}

	public void setCostomillaje(BigDecimal costomillaje) {
		this.costomillaje = costomillaje;
	}

	public BigDecimal getMillaje() {
		return this.millaje;
	}

	public void setMillaje(BigDecimal millaje) {
		this.millaje = millaje;
	}

	public Posicion getDestino() {
		return this.destino;
	}

	public void setDestino(Posicion destino) {
		this.destino = destino;
	}

	public Valor getTipo() {
		return this.tipo;
	}

	public void setTipo(Valor tipo) {
		this.tipo = tipo;
	}

	public Solicitud getSolicitud() {
		return this.solicitud;
	}

	public void setSolicitud(Solicitud solicitud) {
		this.solicitud = solicitud;
	}

	public List<DetalleMaterial> getDetalleMateriales() {
		return this.detalleMateriales;
	}

	public void setDetalleMateriales(List<DetalleMaterial> detalleMateriales) {
		this.detalleMateriales = detalleMateriales;
	}

	public DetalleMaterial addDetalleMaterial(DetalleMaterial detalleMateriale) {
		getDetalleMateriales().add(detalleMateriale);
		detalleMateriale.setDestino(this);

		return detalleMateriale;
	}

	public DetalleMaterial removeDetalleMaterial(DetalleMaterial detalleMateriale) {
		getDetalleMateriales().remove(detalleMateriale);
		detalleMateriale.setDestino(null);

		return detalleMateriale;
	}

	public List<DetalleMoneda> getDetalleMonedas() {
		return this.detalleMonedas;
	}

	public void setDetalleMonedas(List<DetalleMoneda> detalleMonedas) {
		this.detalleMonedas = detalleMonedas;
	}

	public DetalleMoneda addDetalleMoneda(DetalleMoneda detalleMoneda) {
		getDetalleMonedas().add(detalleMoneda);
		detalleMoneda.setDestino(this);

		return detalleMoneda;
	}

	public DetalleMoneda removeDetalleMoneda(DetalleMoneda detalleMoneda) {
		getDetalleMonedas().remove(detalleMoneda);
		detalleMoneda.setDestino(null);

		return detalleMoneda;
	}

	public List<DetalleOtroServicio> getDetalleOtroServicios() {
		return this.detalleOtroServicios;
	}

	public void setDetalleOtroServicios(List<DetalleOtroServicio> detalleOtroServicios) {
		this.detalleOtroServicios = detalleOtroServicios;
	}

	public DetalleOtroServicio addDetalleOtroServicio(DetalleOtroServicio detalleOtroServicio) {
		getDetalleOtroServicios().add(detalleOtroServicio);
		detalleOtroServicio.setDestino(this);

		return detalleOtroServicio;
	}

	public DetalleOtroServicio removeDetalleOtroServicio(DetalleOtroServicio detalleOtroServicio) {
		getDetalleOtroServicios().remove(detalleOtroServicio);
		detalleOtroServicio.setDestino(null);

		return detalleOtroServicio;
	}
	
	public List<DetalleCasetera> getDetalleCaseteras() {
		return this.detalleCaseteras;
	}

	public void setDetalleCaseteras(List<DetalleCasetera> detalleCaseteras) {
		this.detalleCaseteras = detalleCaseteras;
	}

	public DetalleCasetera addDetalleCasetera(DetalleCasetera detalleCasetera) {
		getDetalleCaseteras().add(detalleCasetera);
		detalleCasetera.setDestino(this);

		return detalleCasetera;
	}

	public DetalleCasetera removeDetalleCasetera(DetalleCasetera detalleCasetera) {
		getDetalleCaseteras().remove(detalleCasetera);
		detalleCasetera.setDestino(null);

		return detalleCasetera;
	}	

}